<template>
    <view class="u-progress" :style="{
        borderRadius: round ? '100rpx' : 0,
        height: height + 'rpx',
        backgroundColor: inactiveColor
    }">
        <view :class="[
            type ? `u-type-${type}-bg` : '',
            striped ? 'u-striped' : '',
            striped && stripedActive ? 'u-striped-active' : ''
        ]" class="u-active" :style="[progressStyle]">
            <slot v-if="$slots.default || $slots.$default" />
            <block v-else-if="showPercent">
                {{percent + '%'}}
            </block>
        </view>
    </view>
</template>

<script>
    /**
     * lineProgress 线型进度条
     * @description 展示操作或任务的当前进度，比如上传文件，是一个线形的进度条。
     * @tutorial https://www.uviewui.com/components/lineProgress.html
     * @property {String Number} percent 进度条百分比值，为数值类型，0-100
     * @property {Boolean} round 进度条两端是否为半圆（默认true）
     * @property {String} type 如设置，active-color值将会失效
     * @property {String} active-color 进度条激活部分的颜色（默认#19be6b）
     * @property {String} inactive-color 进度条的底色（默认#ececec）
     * @property {Boolean} show-percent 是否在进度条内部显示当前的百分比值数值（默认true）
     * @property {String Number} height 进度条的高度，单位rpx（默认28）
     * @property {Boolean} striped 是否显示进度条激活部分的条纹（默认false）
     * @property {Boolean} striped-active 条纹是否具有动态效果（默认false）
     * @example <u-line-progress :percent="70" :show-percent="true"></u-line-progress>
     */
    export default {
        name: "u-line-progress",
        props: {
            // 两端是否显示半圆形
            round: {
                type: Boolean,
                default: true
            },
            // 主题颜色
            type: {
                type: String,
                default: ''
            },
            // 激活部分的颜色
            activeColor: {
                type: String,
                default: '#19be6b'
            },
            inactiveColor: {
                type: String,
                default: '#ececec'
            },
            // 进度百分比，数值
            percent: {
                type: Number,
                default: 0
            },
            // 是否在进度条内部显示百分比的值
            showPercent: {
                type: Boolean,
                default: true
            },
            // 进度条的高度，单位rpx
            height: {
                type: [Number, String],
                default: 28
            },
            // 是否显示条纹
            striped: {
                type: Boolean,
                default: false
            },
            // 条纹是否显示活动状态
            stripedActive: {
                type: Boolean,
                default: false
            }
        },
        data() {
            return {

            }
        },
        computed: {
            progressStyle() {
                let style = {};
                style.width = this.percent + '%';
                if(this.activeColor) style.backgroundColor = this.activeColor;
                return style;
            }
        },
        methods: {

        }
    }
</script>

<style lang="scss" scoped>
    @import "../../libs/css/style.components.scss";
    
    .u-progress {
        overflow: hidden;
        height: 15px;
        /* #ifndef APP-NVUE */
        display: inline-flex;
        /* #endif */
        align-items: center;
        width: 100%;
        border-radius: 100rpx;
    }

    .u-active {
        width: 0;
        height: 100%;
        align-items: center;
        @include vue-flex;
        justify-items: flex-end;
        justify-content: space-around;
        font-size: 20rpx;
        color: #ffffff;
        transition: all 0.4s ease;
    }

    .u-striped {
        background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
        background-size: 39px 39px;
    }

    .u-striped-active {
        animation: progress-stripes 2s linear infinite;
    }

    @keyframes progress-stripes {
        0% {
            background-position: 0 0;
        }

        100% {
            background-position: 39px 0;
        }
    }
</style>
